package com.cmonbaby.adapter.listview.base;

import android.widget.BaseAdapter;

import java.util.ArrayList;
import java.util.List;

/**
 * ListView适配器父类
 * @author simon 2016-11-03 下午15:05:29
 * @since JDK1.8 SDK6.0.1
 * @version V2.3.4
 * @param <T>
 */
public abstract class BaseLViewAdapter<T> extends BaseAdapter {

    protected List<T> mDatas = new ArrayList<>();

    public BaseLViewAdapter(List<T> datas) {
        if (datas != null) this.mDatas.addAll(datas);
    }

    /**
     * <strong>添加某数据</strong>
     *
     * @param entity 添加的单个数据
     */
    public void addData(T entity) {
        if (entity == null) return;
        if (mDatas == null) return;
        mDatas.add(entity);
        notifyDataSetChanged();
    }

    /**
     * <strong>添加头部单个实体数据</strong>
     *
     * @param entity 添加的单个数据
     * @author simon
     * @since JDK1.8 SDK6.0.1
     */
    public void addFirst(T entity) {
        if (entity == null) return;
        if (mDatas == null) return;
        mDatas.add(0, entity);
        notifyDataSetChanged();
    }

    /**
     * <strong>添加数据集合</strong>
     *
     * @param eList 添加的数据集合
     */
    public void addDatas(List<T> eList) {
        if (eList == null) return;
        if (mDatas == null) return;
        mDatas.addAll(eList);
        notifyDataSetChanged();
    }

    /**
     * <strong>移除某数据</strong>
     *
     * @param position 移除单个数据的位置
     */
    public void removeDatas(int position) {
        if (position < mDatas.size()) {
            if (mDatas == null) return;
            mDatas.remove(position);
            notifyDataSetChanged();
        }
    }

    /**
     * <strong>替换某位置数据</strong>
     *
     * @param position 修改数据的位置
     * @param entity 修改的单个数据
     */
    public void replaceDatas(int position, T entity) {
        if (position < mDatas.size()) {
            if (mDatas == null) return;
            mDatas.set(position, entity);
            notifyDataSetChanged();
        }
    }

    /**
     * <strong>修改整个数据集合</strong>
     *
     * @param eList 修改数据集合
     */
    public void updateDatas(List<T> eList) {
        if (eList == null) return;
        if (mDatas == null) return;
        mDatas = eList;
        notifyDataSetChanged();
    }

    /**
     * @return 获取适配器数据集合
     */
    public List<T> getAdapterDatas() {
        return mDatas;
    }

    /** 清除所有数据 */
    public void clearAdapterDatas() {
        if (mDatas == null) return;
        mDatas.clear();
        notifyDataSetChanged();
    }
}
